package com.anxin.act.task.dao;

import java.util.Date;
import java.util.List;

import com.anxin.act.task.entity.ViewHiTask;
import com.anxin.act.task.entity.WfActHiTask;
import com.anxin.act.task.entity.WfActRuTask;
import com.anxin.framework.web.dao.BaseDao;
import org.apache.ibatis.annotations.Param;

/**
 * 加签任务历史Dao接口
 *
 * @author jbs
 * @date 2021-10-22
 */
public interface WfActHiTaskDao extends BaseDao<WfActHiTask>{
    /**
     * 查询加签任务历史
     *
     * @param id 加签任务历史ID
     * @return 加签任务历史
     */
    public WfActHiTask getById(String id);

    /**
     * 提交任务时，更新已办
     * @param wfActHiTask
     */
    public void complete(WfActHiTask wfActHiTask);


    /**
     * 查询加签任务历史列表
     *
     * @param wfActHiTask 加签任务历史
     * @return 加签任务历史集合
     */
    public List<WfActHiTask> findList(WfActHiTask wfActHiTask);

    /**
     * 新增加签任务历史
     *
     * @param wfActRuTask 加签任务历史
     * @return 结果
     */
    public int insertByRuTask(WfActRuTask wfActRuTask);

    /**
     * 新增加签任务历史
     *
     * @param wfActHiTask 加签任务历史
     * @return 结果
     */
    public int insert(WfActHiTask wfActHiTask);


    /**
     * 修改加签任务历史
     *
     * @param wfActHiTask 加签任务历史
     * @return 结果
     */
    public int update(WfActHiTask wfActHiTask);


    public void hangTask(@Param("id") String id);


    /**
     * 删除加签任务历史
     *
     * @param id 加签任务历史ID
     * @param userId 操作人ID
     * @return 结果
     */
    public int deleteById(@Param("id")String id,@Param("userId")String userId);

    /**
     * 恢复任务
     * @param id
     */
    public void restoreTask(@Param("id") String id);

    /**
     * 根据source递归删除任务
     * @param viewHiTask
     */
    public void delByTaskId(ViewHiTask viewHiTask);

    /**
     * 根据sourceId查询任务
     * @param sourceId 原任务ID
     */
    public List<WfActHiTask> findBySourceId(@Param("sourceId") String sourceId);

    /**
     * 根据sourceId和sourceType查询任务
     * @param sourceId 原任务ID
     * @param sourceType 来源类型
     */
    public WfActHiTask findBySourceIdAndSourceType(@Param("sourceId") String sourceId,@Param("sourceType") String sourceType);

    /**
     * 根据sourceId删除任务
     * @param sourceId 原任务ID
     */
    public void delBySourceId(@Param("sourceId") String sourceId);

    /**
     * 修改流程审批人
     * @param id 任务ID
     * @param assignee 新的审批人
     */
    public void updateAssignee(@Param("id")String id,@Param("assignee") String assignee);

    /**
     * 修改历史人物时间字段
     * @param id
     * @param startTime
     * @param endTime
     */
    public void updateTime(@Param("id") String id, @Param("startTime") Date startTime, @Param("approvalTime") Date endTime);

}
